ABAP Overcome Long Text Links Handling using Custom Class 您所在的位置:网站首页 hyperlink in standard text sap blogs ABAP Overcome Long Text Links Handling using Custom Class

ABAP Overcome Long Text Links Handling using Custom Class

2023-03-22 11:48| 来源: 网络整理| 查看: 265

Lets talk about the Links in the Message Long text. This is also applicable to any documentation as well. There are few limitations, I will show you how to overcome them.

Links in Standard SAP

Using the SAP you can provide, links to the transaction code or reports or documentation to the Data elements in the Long Texts. This not limited to only Message Long Text. This helps users to directly navigate from the long text to the different subsequent activity.

For demo purpose, I will take Message long text to show how you can add the link to it.

To add the link to Message Long text in SE91:

Navigate to message long text. Select Insert > Link Select Transaction Code from the Popup Enter the Transaction as MM03 and add the text to display ABAP_Long_Text_Link_2

This would generate the text like this:

View Material Master

To test, raise the message and press the ? to see the long text. In the long text, click on the View Material Master to call MM03.

Passing the Data

Now, this is great. But it would be even more beautiful if we can send the material number. Standard SAP allows you to pass the parameters to the link. There are different techniques for different document class.

For Transaction Code

For Transaction code, you can send the additional details using parenthesis ( ). The syntax would be:

Material Master

Here, MAT is the material parameter ID. The values is being passed in the message variable &SYST-MSGV1& — The message is (Material &1 has low stock.).

To call Reports with data

For reports, you would need to pass the variant name along with the report name. Std SAP calls the report with the variant.

Material Documents

Here, RM07DOCS is the report and VARI1 is the variant, separated by a dot

Activation Error

You would get error while activation, but just ignore that and continue activation.

ABAP_Long_Text_Link_Activate_Error Limitations

Things are looking interesting so far, but there are few limitations:

Only 20 characters are passed to the logic, for TRAN document class. This 20 characters include the Transaction name, Parameter ID, Message variable Calling the Report may not be feasible with variant all the time as there would be different values for the variant. This would need to be done by creating a temporary variant before message call, and delete it afterwords. Overcome the limitations – Custom class to handle the Links

Let me show you, how you can overcome these limitations.

The idea is to use the custom document class in the documentation and have a custom event handler class to handle the link click. Sounds good, huh?

Follow these steps to create necessary setup:

Inherit a custom class say ZCL_EPSS_SAPEVENT_HANDLE from CL_EPSS_SAPEVENT Redefine the method RESOLVE_LINK Add a case statement DOC_LINK+3(4). When Custom Document Type (e.g. ZTRA) call custom logic, When others call SUPER->RESOLVE_LINK( ) In documentation – use the Custom Document Type ZTRA instead of TRAN Update the EPPS methods table to use this custom class ZCL_EPSS_SAPEVENT_HANDLE – Use SM30 for table EPSSA2 to update the new class

Your class should be look like this:

ABAP_Long_Text_Link_Custom_Class

Customizing to use the Custom class

ABAP_Long_Text_Link_Custom_Class_Handler

Lets change the way we pass the data from the message text to the event callback.

Call MMBE

This would be easy to find out the necessary parameters and values using this type of parameter passing. Split at dot and than split at equal sign.

Class ZCL_EPSS_SAPEVENT_HANDLE

Method RESOLVE_LINK redefinition. Here we are gonna handle the custom Document Type, and let the SUPER->RESOLVE_LINK (Method RESOLVE_LINK in class CL_EPSS_SAPEVENT)

  METHOD resolve_link. * me->doc_link = doc_link. me->epss_html_viewer = epss_html_viewer. me->help_info = help_info.   CASE doc_link+3(4). WHEN 'ZTRA'. me->ztransaction( ).   WHEN 'ZREP'. me->zsubmit_report( ).   when 'ZURL'. me->ZURL( ).   WHEN OTHERS. super->resolve_link( doc_link = doc_link epss_html_viewer = epss_html_viewer help_info = help_info ). ENDCASE.   ENDMETHOD.   URL Callback

To call the URL when we have ZURL document type:

  METHOD zurl. "Call Website DATA: lv_url TYPE bxmnodes-url.   lv_url = doc_link+8.   CALL FUNCTION 'PRGN_START_EXECUTE_MODULE' EXPORTING url_type = 'URL' url = lv_url.   ENDMETHOD.  

Add this in message long text:

  Call Website  

And simply call the message.

To test, you would need to see the long text and press the click.

Report Program Callback

Method ZREPORT_SUBMIT to handle ZREP. To be able to handle the data properly, a static variable is used in the class. This would be populated before calling the message. If message long text report callback is called, the data would be passed from static to the report SUBMIT.

  METHOD zsubmit_report.   " DOC_LINK has the link info "Report MMBE   TYPES: tt_parts TYPE STANDARD TABLE OF char50. DATA: lv_part TYPE char50. DATA: lt_parts TYPE tt_parts. DATA: lt_params TYPE tt_parts.   " DATA: lv_prog TYPE sy-cprog. DATA: lv_name TYPE char30. DATA: lv_value TYPE char50.   SPLIT doc_link+8 "Ignore DS:ZREP. AT '.' INTO TABLE lt_parts.   * 1st = Report READ TABLE lt_parts INTO lv_part INDEX 1. IF sy-subrc EQ 0. lv_prog = lv_part. ENDIF. IF lv_prog IS INITIAL. MESSAGE 'Report is not supplied' TYPE 'I'. EXIT. ENDIF.   SUBMIT (lv_prog) VIA SELECTION-SCREEN AND RETURN WITH SELECTION-TABLE t_rspar.   CLEAR: zcl_test_np_epss_sapevent=>t_rspar.   ENDMETHOD.  

Add this into the message long text:

  Report MMBE  

And call the message:

  DATA: rspar_line LIKE LINE OF ZCL_TEST_NP_EPSS_SAPEVENT=>t_rspar.     rspar_line-selname = 'MS_MATNR'. rspar_line-kind = 'S'. rspar_line-sign = 'I'. rspar_line-option = 'EQ'. rspar_line-low = 'TEST_NP'. APPEND rspar_line TO ZCL_TEST_NP_EPSS_SAPEVENT=>t_rspar.   rspar_line-selname = 'MS_WERKS'. rspar_line-low = '1100'. APPEND rspar_line TO ZCL_TEST_NP_EPSS_SAPEVENT=>t_rspar.     MESSAGE I002(Z_TESTMESSAGE) with 'TEST_NP' '1100'.   Transaction Callback

Create Method ZTRANSACTION to handle the Custom Transaction event ZTRA:

  METHOD ztransaction.   " DOC_LINK has the link info "Call MMBE   TYPES: tt_parts TYPE STANDARD TABLE OF char50. DATA: lv_part TYPE char50. DATA: lt_parts TYPE tt_parts. DATA: lt_params TYPE tt_parts.   " DATA: lv_tcode TYPE sy-tcode. DATA: lv_param TYPE memoryid. DATA: lv_value TYPE char50.   SPLIT doc_link+8 "Ignore DS:ZTRA. AT '.' INTO TABLE lt_parts.   * 1st = TCODE READ TABLE lt_parts INTO lv_part INDEX 1. IF sy-subrc EQ 0. lv_tcode = lv_part. ENDIF. IF lv_tcode IS INITIAL. MESSAGE 'T-Code is not supplied' TYPE 'I'. ENDIF.   * LOOP AT lt_parts INTO lv_part FROM 2. CLEAR: lv_param, lv_value.   SPLIT lv_part AT '=' INTO lv_param lv_value.   IF lv_param IS NOT INITIAL. SET PARAMETER ID lv_param FIELD lv_value. ENDIF. ENDLOOP.   CALL TRANSACTION lv_tcode.   ENDMETHOD.  

To Use it, add this into message long text:

MMBE

Call the message:

  MESSAGE I002(Z_TESTMESSAGE) with 'TEST_NP' '1100'.   Notes: Create different Custom document type – for CALL TRANSACTION, CALL TRANSACTION and SKIP INITIAL SCREEN. Pass data using the Static variables or Function Modules in the same Function group

Solution was originally discussed at SCN – DS:REPN Parameters



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有